package com.gsj.lx.mybatislx.config;

/**
 * @program: swaggerToWrodlx
 * @description:
 * @author: 郭书江
 * @create: 2022-05-26 10:11
 **/

import com.gsj.lx.mybatislx.model.User;

import java.lang.reflect.Field;

/**
 * @Auther his
 * @data2019/12/1015:01
 * @description  可以生成简单的sql语句和实体类中的属性变量
 * 第一个为 id 主键 integer类型 其他为String类型 的适用
 */
public class CrudUtils {


    public static void main(String[] args) {

        /**
         *
         *  生成实体类属性
         */

        System.out.println("生成实体类属性 --------------------------------------------------------------------------------------------------------");
        String str="id\n" +
                "caseNumber\n" +
                "phone\n" +
                "firstDate\n" +
                "helpSum\n" +
                "caseName\n";

        String[] model = getModel(str, "\n");
        for (String s : model) {
            System.out.println(s);
        }


        /**
         *  获取实体类中的属性
         */
        System.out.println("\n获取实体类中的属性 --------------------------------------------------------------------------------------------------------");

        String[] proPertis = getProPertis(new User());
        for (String proPerti : proPertis) {
            System.out.println(proPerti);
        }


        /**
         * 获取增删改查sql语句
         * new 一个对象 ， 表名
         */
        System.out.println("\n获取增删改查sql语句 --------------------------------------------------------------------------------------------------------");
        String[] caseinputs = getField(new User(), "caseinput");
        for (String caseinput : caseinputs) {
            System.out.println(caseinput);
        }


    }


    /**
     * 生成实体类变量
     * @param str 字符
     * @param fen  分隔符
     * @return
     */
    public static String [] getModel(String str,String fen){
        String[] split = str.split(fen);
        String []  models=new String [split.length];
        for (int i = 1; i < split.length; i++) {
            models[0]="private Integer "+split[0]+";";
            models[i]="private String "+split[i]+";";
        }
        return models;
    }


    /**
     * 反射获取类中的属性
     * @return
     */

    public static String[] getProPertis(Object o) {
        Field[] declaredFields = o.getClass().getDeclaredFields();//获得属性
        String [] arrs=new String[declaredFields.length];//定义一个和declaredFields长度相同的数组，储存类中的属性
        for (int i = 0; i < declaredFields.length; i++) {//遍历数组获取所有属性
            arrs[i]=declaredFields[i].toString().substring(declaredFields[i].toString().lastIndexOf(".")+1);
        }
        return arrs;
    }


    /**
     * 通过反射获取类中的属性
     * @param o 实体类
     * @param table 表名
     * @return
     */
    public static String [] getField(Object o,String table){

        Field[] declaredFields = o.getClass().getDeclaredFields();//获得属性
        String [] arrs=new String[declaredFields.length];//定义一个和declaredFields长度相同的数组，储存类中的属性
        for (int i = 0; i < declaredFields.length; i++) {//遍历数组获取所有属性
            arrs[i]=declaredFields[i].toString().substring(declaredFields[i].toString().lastIndexOf(".")+1);
        }

        return crudToString(arrs, table);
    }



    /**
     * 把增删改查组合
     * @param table 表名
     * @param arr 字段数组
     * @return
     */
    public static String [] crudToString(String [] arr,String table) {
        String [] arrs= new String [4];
        arrs[0]=add(arr,table);
        arrs[1]=delete(table,arr);
        arrs[2]=edit(arr,table);
        arrs[3]=query(arr,table);
        return arrs;
    }


    /**
     * @param arr 表中字段
     * @param table 表名
     * @return
     */
    public static String add(String [] arr,String table) {
        StringBuffer addBuffer=new StringBuffer("INSERT INTO "+table+"(");
        for (int i = 1; i < arr.length; i++) {
            addBuffer.append(arr[i]+",");
        }
        addBuffer.delete(addBuffer.length()-1,addBuffer.length());//删除最后一个逗号
        addBuffer.append(")");
        addBuffer.append(" VALUES(");
        for (int i = 1; i < arr.length; i++) {
            addBuffer.append("#{"+arr[i]+"},");
        }
        addBuffer.delete(addBuffer.length()-1,addBuffer.length());//删除最后一个逗号
        addBuffer.append(")");
        return addBuffer.toString();
    }

    /**
     * @param arr 表中字段
     * @param table 表名
     * @return
     */
    public static String edit(String [] arr,String table) {
        StringBuffer editBuffer=new StringBuffer("UPDATE "+table+" SET ");
        for (int i = 1; i < arr.length; i++) {
            editBuffer.append(arr[i]+"=#{"+arr[i]+"},");
        }
        editBuffer.delete(editBuffer.length()-1,editBuffer.length());
        editBuffer.append(" WHERE "+arr[0]+"=#{"+arr[0]+"}");
        return editBuffer.toString();
    }
    public static String delete(String table,String [] arr) {
        return "DELETE FROM "+table+" WHERE "+arr[0]+"=#{"+arr[0]+"}";
    }
    /**
     * @param arr 表中字段
     * @param table 表名
     * @return
     */
    public static String query(String [] arr,String table) {
        StringBuffer queryBuffer=new StringBuffer("SELECT ");
        for (String s : arr) {
            queryBuffer.append(s+",");
        }
        queryBuffer.delete(queryBuffer.length()-1,queryBuffer.length());
        queryBuffer.append(" FROM "+table);
        return queryBuffer.toString();
    }

}
